﻿namespace CollisionDetection.Models
{
    using System;
    using System.Collections.Generic;
    using IS.Projecto.DataAccessLayer;
    using IS.Projecto.Modelo;
    using Spring.Context;
    using Spring.Context.Support;

    public class DataService
    {
        private readonly IApplicationContext _context;
        private readonly IDataRepository _dataRepository;
        private EnumTipoOrigem _tipoOrigemDados;

        public EnumTipoOrigem TipoOrigemDados
        {
            get { return _tipoOrigemDados; }
            set
            {
                _tipoOrigemDados = value;
            }
        }

        public DataService()
        {
            _context = ContextRegistry.GetContext();
            _context.Name = @"Application context";
            _dataRepository = (IDataRepository) _context.GetObject("DataRepository");
        }

        public IList<Horario> GetHorarios(Curso curso, DateTime initial, DateTime final)
        {
            switch (_tipoOrigemDados)
            {
                case EnumTipoOrigem.toDatabase:
                    return _dataRepository.ListHorarios(curso, initial, final);
                case EnumTipoOrigem.toWebService:
                    {
                        var service = new ServiceReference.ProjectoServiceClient();
                        var list = service.SelectHorarios(curso.Id, initial, final);
                        service.Close();
                        return list;

                    }
                default:
                    return new List<Horario>();
            }
        }

        public IList<Inscricao> GetInscricoes(Curso curso)
        {
            switch (_tipoOrigemDados)
            {
                case EnumTipoOrigem.toDatabase:
                    return _dataRepository.ListInscricoes(curso);
                case EnumTipoOrigem.toWebService:
                    {
                        var service = new ServiceReference.ProjectoServiceClient();
                        var list = service.SelectInscricoes(curso.Id);
                        service.Close();
                        return list;

                    }
                default:
                    return new List<Inscricao>();
            }
        }

        public IList<Curso> GetCursos()
        {
            switch (_tipoOrigemDados)
            {
                case EnumTipoOrigem.toDatabase:
                    return _dataRepository.ListAllCursos();
                case EnumTipoOrigem.toWebService:
                    {
                        var service = new ServiceReference.ProjectoServiceClient();
                        var list = service.SelectAllCursos();
                        service.Close();
                        return list;

                    }
                default:
                    return new List<Curso>();
            }
        }
    }
}